package fr.afcepf.atod18.commande.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import fr.afcepf.atod18.commande.entity.Commande;
import fr.afcepf.atod18.commande.entity.EtatCommande;
import fr.afcepf.atod18.commande.jms.JmsProducer;
import fr.afcepf.atod18.restaurants.entity.Restaurant;
import fr.afcepf.atod18.utilitaires.dao.IGenericDao;

@Service
@Transactional
public class ServiceCommande implements IServiceCommande {
	@Autowired
	IGenericDao<Commande> daoCommande;
	@Autowired
	IGenericDao<Restaurant> daoRestaurant;
	@Autowired
	JmsProducer jmsProducer;

	@Override
	public void envoyerJmsCommande(int idCommande, EtatCommande etatCommande) {
		System.out.println("idCommande=" + idCommande + " "
				+ etatCommande.getLibelle() + " " + jmsProducer);
		jmsProducer.envoyerMessage(idCommande, etatCommande);
	}

	@Override
	public void ajouter(Commande commande) {
		daoCommande.save(commande);
	}

	@Override
	public Commande mettreAJour(Commande commande) {
		return daoCommande.update(commande);
	}

	@Override
	public Commande rechercherParId(int id) {
		return daoCommande.findOne(id);
	}

	@Override
	public List<Commande> rechercherTout() {
		return daoCommande.findAll();
	}

	@Override
	public void supprimerParId(int id) {
		daoCommande.deleteById(id);
	}

	@Override
	public void supprimer(Commande commande) {
		daoCommande.delete(commande);
	}

	@Override
	public void supprimerListe(List<Commande> liste) {
		daoCommande.deleteList(liste);
	}

	@Override
	public List<Commande> rechercherParNom(String nomColonne, String libelle) {
		return daoCommande.findByName(nomColonne, libelle);
	}

	public IGenericDao<Commande> getDaoCommande() {
		return daoCommande;
	}

	public void setDaoCommande(IGenericDao<Commande> daoCommande) {
		this.daoCommande = daoCommande;
	}

	@Override
	public List<Commande> rechercherCommandeRestaurateur(int idRestaurateur) {
		System.out.println("recherche des commandes pour restaurateur "
				+ idRestaurateur);
		List<Commande> listeRetour = new ArrayList<Commande>();
		Restaurant rest = null;
		List<Restaurant> restos = daoRestaurant.findAll();
		System.out.println("Recherche des restaurants "+ restos.size());
		for (Restaurant r : restos) {
			System.out.println("restaurant = "+r.getNom());
			if (r.getRestaurateur() == null){
				continue;
			}
			if ( r.getRestaurateur().getId() == idRestaurateur) {
				System.out.println("Restaurant trouvé = " + r.getId()+ " "+ r.getNom());
				rest = r;
				break;
			}
		}
		List<Commande> listeCommande = daoCommande.findAll();
		if (rest != null) {
			for (Commande commande : listeCommande) {
				System.out.println("commande all=" + commande.getId());
				if (commande.getRestaurant().getId() == rest.getId()) {
					System.out.println("Commande du restaurateur="
							+ idRestaurateur + " commande=" + commande.getId());
					System.out.println(commande.getClient().toString());
					listeRetour.add(commande);
				}
			}
		}
		else {
			listeRetour=null;
		}
		return listeRetour;
	}
}
